# Copyright 2019 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# NOTE: This file is auto generated by the elixir code generator program.
# Do not edit this file manually.

defmodule GoogleApi.Container.V1.Model.AddonsConfig do
  @moduledoc """
  Configuration for the addons that can be automatically spun up in the cluster, enabling additional functionality.

  ## Attributes

  *   `cloudRunConfig` (*type:* `GoogleApi.Container.V1.Model.CloudRunConfig.t`, *default:* `nil`) - Configuration for the Cloud Run addon, which allows the user to use a managed Knative service.
  *   `configConnectorConfig` (*type:* `GoogleApi.Container.V1.Model.ConfigConnectorConfig.t`, *default:* `nil`) - Configuration for the ConfigConnector add-on, a Kubernetes extension to manage hosted GCP services through the Kubernetes API
  *   `dnsCacheConfig` (*type:* `GoogleApi.Container.V1.Model.DnsCacheConfig.t`, *default:* `nil`) - Configuration for NodeLocalDNS, a dns cache running on cluster nodes
  *   `gcePersistentDiskCsiDriverConfig` (*type:* `GoogleApi.Container.V1.Model.GcePersistentDiskCsiDriverConfig.t`, *default:* `nil`) - Configuration for the Compute Engine Persistent Disk CSI driver.
  *   `gcpFilestoreCsiDriverConfig` (*type:* `GoogleApi.Container.V1.Model.GcpFilestoreCsiDriverConfig.t`, *default:* `nil`) - Configuration for the GCP Filestore CSI driver.
  *   `gcsFuseCsiDriverConfig` (*type:* `GoogleApi.Container.V1.Model.GcsFuseCsiDriverConfig.t`, *default:* `nil`) - Configuration for the Cloud Storage Fuse CSI driver.
  *   `gkeBackupAgentConfig` (*type:* `GoogleApi.Container.V1.Model.GkeBackupAgentConfig.t`, *default:* `nil`) - Configuration for the Backup for GKE agent addon.
  *   `horizontalPodAutoscaling` (*type:* `GoogleApi.Container.V1.Model.HorizontalPodAutoscaling.t`, *default:* `nil`) - Configuration for the horizontal pod autoscaling feature, which increases or decreases the number of replica pods a replication controller has based on the resource usage of the existing pods.
  *   `httpLoadBalancing` (*type:* `GoogleApi.Container.V1.Model.HttpLoadBalancing.t`, *default:* `nil`) - Configuration for the HTTP (L7) load balancing controller addon, which makes it easy to set up HTTP load balancers for services in a cluster.
  *   `kubernetesDashboard` (*type:* `GoogleApi.Container.V1.Model.KubernetesDashboard.t`, *default:* `nil`) - Configuration for the Kubernetes Dashboard. This addon is deprecated, and will be disabled in 1.15. It is recommended to use the Cloud Console to manage and monitor your Kubernetes clusters, workloads and applications. For more information, see: https://cloud.google.com/kubernetes-engine/docs/concepts/dashboards
  *   `networkPolicyConfig` (*type:* `GoogleApi.Container.V1.Model.NetworkPolicyConfig.t`, *default:* `nil`) - Configuration for NetworkPolicy. This only tracks whether the addon is enabled or not on the Master, it does not track whether network policy is enabled for the nodes.
  *   `parallelstoreCsiDriverConfig` (*type:* `GoogleApi.Container.V1.Model.ParallelstoreCsiDriverConfig.t`, *default:* `nil`) - Configuration for the Cloud Storage Parallelstore CSI driver.
  *   `rayOperatorConfig` (*type:* `GoogleApi.Container.V1.Model.RayOperatorConfig.t`, *default:* `nil`) - Optional. Configuration for Ray Operator addon.
  *   `statefulHaConfig` (*type:* `GoogleApi.Container.V1.Model.StatefulHAConfig.t`, *default:* `nil`) - Optional. Configuration for the StatefulHA add-on.
  """

  use GoogleApi.Gax.ModelBase

  @type t :: %__MODULE__{
          :cloudRunConfig => GoogleApi.Container.V1.Model.CloudRunConfig.t() | nil,
          :configConnectorConfig => GoogleApi.Container.V1.Model.ConfigConnectorConfig.t() | nil,
          :dnsCacheConfig => GoogleApi.Container.V1.Model.DnsCacheConfig.t() | nil,
          :gcePersistentDiskCsiDriverConfig =>
            GoogleApi.Container.V1.Model.GcePersistentDiskCsiDriverConfig.t() | nil,
          :gcpFilestoreCsiDriverConfig =>
            GoogleApi.Container.V1.Model.GcpFilestoreCsiDriverConfig.t() | nil,
          :gcsFuseCsiDriverConfig =>
            GoogleApi.Container.V1.Model.GcsFuseCsiDriverConfig.t() | nil,
          :gkeBackupAgentConfig => GoogleApi.Container.V1.Model.GkeBackupAgentConfig.t() | nil,
          :horizontalPodAutoscaling =>
            GoogleApi.Container.V1.Model.HorizontalPodAutoscaling.t() | nil,
          :httpLoadBalancing => GoogleApi.Container.V1.Model.HttpLoadBalancing.t() | nil,
          :kubernetesDashboard => GoogleApi.Container.V1.Model.KubernetesDashboard.t() | nil,
          :networkPolicyConfig => GoogleApi.Container.V1.Model.NetworkPolicyConfig.t() | nil,
          :parallelstoreCsiDriverConfig =>
            GoogleApi.Container.V1.Model.ParallelstoreCsiDriverConfig.t() | nil,
          :rayOperatorConfig => GoogleApi.Container.V1.Model.RayOperatorConfig.t() | nil,
          :statefulHaConfig => GoogleApi.Container.V1.Model.StatefulHAConfig.t() | nil
        }

  field(:cloudRunConfig, as: GoogleApi.Container.V1.Model.CloudRunConfig)
  field(:configConnectorConfig, as: GoogleApi.Container.V1.Model.ConfigConnectorConfig)
  field(:dnsCacheConfig, as: GoogleApi.Container.V1.Model.DnsCacheConfig)

  field(:gcePersistentDiskCsiDriverConfig,
    as: GoogleApi.Container.V1.Model.GcePersistentDiskCsiDriverConfig
  )

  field(:gcpFilestoreCsiDriverConfig, as: GoogleApi.Container.V1.Model.GcpFilestoreCsiDriverConfig)

  field(:gcsFuseCsiDriverConfig, as: GoogleApi.Container.V1.Model.GcsFuseCsiDriverConfig)
  field(:gkeBackupAgentConfig, as: GoogleApi.Container.V1.Model.GkeBackupAgentConfig)
  field(:horizontalPodAutoscaling, as: GoogleApi.Container.V1.Model.HorizontalPodAutoscaling)
  field(:httpLoadBalancing, as: GoogleApi.Container.V1.Model.HttpLoadBalancing)
  field(:kubernetesDashboard, as: GoogleApi.Container.V1.Model.KubernetesDashboard)
  field(:networkPolicyConfig, as: GoogleApi.Container.V1.Model.NetworkPolicyConfig)

  field(:parallelstoreCsiDriverConfig,
    as: GoogleApi.Container.V1.Model.ParallelstoreCsiDriverConfig
  )

  field(:rayOperatorConfig, as: GoogleApi.Container.V1.Model.RayOperatorConfig)
  field(:statefulHaConfig, as: GoogleApi.Container.V1.Model.StatefulHAConfig)
end

defimpl Poison.Decoder, for: GoogleApi.Container.V1.Model.AddonsConfig do
  def decode(value, options) do
    GoogleApi.Container.V1.Model.AddonsConfig.decode(value, options)
  end
end

defimpl Poison.Encoder, for: GoogleApi.Container.V1.Model.AddonsConfig do
  def encode(value, options) do
    GoogleApi.Gax.ModelBase.encode(value, options)
  end
end
